#ifndef TIMESERIESSTORAGE_H
#define TIMESERIESSTORAGE_H

#include <QObject>

#include <QHash>
#include <QQueue>
#include <QString>
#include <QFile>
#include <QDateTime>
#include <QSet>
#include <QPair>

class TimeSeriesStorage : public QObject
{
    Q_OBJECT

public:
    // 时间轴数据结构：时间戳 + 各曲线值
    struct TimePoint {
        double timestamp;                 // 系统时间戳
        QHash<QString, double> values;    // 曲线名称到数值的映射
        bool processed = false;          // 标记是否已被处理
    };

public:
    explicit TimeSeriesStorage(double timeWindow = 60.0,
                               const QString& persistPath = "",
                               QObject *parent = nullptr);
    ~TimeSeriesStorage();
    // 添加数据点（自动修剪旧数据）
    void addData(const QString &curveName, double timestamp, double value);

    // 获取未处理数据（按时间窗口）
    QList<TimePoint> getUnprocessedData();


    // 获取指定曲线的最新值
    QPair<double, double> getLatestValue(const QString& curveName) const;


    // 获取所有曲线名称
    QSet<QString> getAllCurves() const;

    // 设置区间
    void setTimeWindow(double timeWindow);

private:
    // 修剪过期数据（自动持久化）
    void trimExpiredData(double latestTimestamp);


    // 持久化单个时间点数据
    void persistData(const TimePoint& point);

signals:


private:
    QQueue<TimePoint> m_timeSeries;  // 按时间排序的队列
    QSet<QString> m_curves;         // 存在的曲线集合
    double m_timeWindow;            // 时间窗口长度（秒）
    QString m_persistPath;          // 持久化存储路径

};

#endif // TIMESERIESSTORAGE_H
